package systemFile;

import org.apache.log4j.Logger;
import serverHandling.HttpRequestHandlers;

import java.awt.*;
import java.io.File;
import java.util.Iterator;
import java.util.TimerTask;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Schedule extends TimerTask {

    private static Logger log = Logger.getLogger(TimerTask.class);

    protected Lock lock = new ReentrantLock();

    /**
     * co okreslony czas synchronizuja pliki
     * Wpierw sprawdzana jest lista zwiazana usunieciem plikow lub modyfikacja katalogow,
     * w kolejnym kroku synchronizowane sa pliki.
     */
    @SuppressWarnings("ConstantConditions")
    public void run() {
        if (!FileBuffer.getInstance().getListOfFile().isEmpty()) {
            FileWatcher.icon.setImage(SysTray.getRefreshImage());
            // taka konstrukcja zeby watki na siebie nie zachodzily ( ConcurrentModificationException )
            for (Iterator it = FileBuffer.getInstance().getListOfFile().keySet().iterator(); it.hasNext(); ) {
                lock.lock();
                try {
                    File fileIterator = (File) it.next();
                    HttpRequestHandlers.tryToSendFile(fileIterator, FileBuffer.getInstance().getListOfFile().get(fileIterator));
                    it.remove();
                } catch (Exception e) {
                    FileWatcher.icon.displayMessage("", "Wystapil blad podczas wysylania pliku.", TrayIcon.MessageType.WARNING);
                    log.error(e.getMessage());
                } finally {
                    lock.unlock();
                    FileWatcher.icon.setImage(SysTray.getImage());
                }
            }

            FileWatcher.icon.setImage(SysTray.getImage());
        }

    }
}
